home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Netware Super Library
/
Netware Super Library.iso
/
pgm_tool
/
lu62
/
debug
/
sendfil.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-07-03
|
8KB
|
309 lines
/*
* CopyRight 1995. Nicholas Poljakov all rights reserved.
*/
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <state1.h>
#define BORDER 1
#define REV_VID 0x70
#define NORM_VID 0x1E
#define MAX_FRAME 31
#define BKSP 8
#define F1 59
#define F2 60
#define F3 61
#define F4 62
#define F5 63
#define F6 64
#define F7 65
#define F8 66
#define F9 67
#define F10 68
#define HM 71 /* Home key */
#define UP 72 /* Up Arrow */
#define PU 73 /* Page Up */
#define LT 75 /* Left Arrow */
#define RT 77 /* Right Arrow */
#define END 79 /* End key */
#define DN 80 /* Down Arrow */
#define PD 81 /* Page Down */
#define ESC '\033'
#define DIR 0x10
#define BLKSIZ 1000 /* block size for send */
#define ROWS1 19
#define ROWS2 23
#define ROWS 25
#define COLS 78
#define L_W 20
#define M_W 36
#define R_W 20
#define SCRNSIZE ((ROWS)*(COLS+2)*2)
#define LAST (24 * 80)*2
#define M0C 4 /* Files maping col.s */
#define M0L 14 /* Files maping rows */
#define M0F (((80 * 5) + 9)) * 2
#define INTR 18*2
extern unsigned int attr1b;
extern unsigned int *ptrs;
extern int size;
extern unsigned char row, col;
extern int adapter;
extern unsigned char far *videomem;
extern int offset;
extern int sw;
extern char *path;
extern char file[12];
extern char tpname[31];
extern char luname[8];
extern char rcv_file[12];
extern char dta[128];
extern char far *vid_mem;
extern short cur_ln;
extern struct part { /* partner structure */
char plu[8] ; /* str plu_name */
int psl; /* str plu_s_limit */
char mode_name[8] ; /* str mode_name */
int max_ru_size; /* str ru_h_size */
int pacing; /* str = */
unsigned char lu_type;
} pstr[4];
extern struct APL_PARM{
int status; /* 0-start aplmain,1-start transaction,2-dos shell */
char p[80]; /* string for system(p) */
char args[64];/* string of arguments */
int rc; /* aplmain return code */
char dir[60];/* directory name for aplmain */
int drlen; /* directory name length */
void *tpe; /* entry of exit program */
char pgm_state;
}*p_aparm;
extern struct menu_frame {
int startx, endx, starty, endy;
unsigned char *p;
char **menu;
char *keys;
int border;
unsigned long count;
unsigned char attrib;
int active;
int curx, cury;
char *header;
} frame[MAX_FRAME];
extern char p_dcl[21];
extern unsigned char dr_ind[80];
extern char c_pt[60];
extern int drive_ind[10];
extern char lu_name[9];
extern char lu_id[8];
extern char tp_id[8];
extern unsigned long conv_id;
extern char mode_name[9];
extern char tp_exist;
SendFil(p, n)
char *p;
int n;
{
long FS; /* File Size */
int fd; /* File handle */
char *buff; /* input buffer */
unsigned s;
char fsiz[10];
char retstr[8];
unsigned long count;
int i;
int ch;
unsigned char rts;
unsigned char wr;
unsigned int max_length ;
char pt[80];
unsigned char tpn[64];
struct rc {
unsigned int prim;
unsigned long sec;
} v_rc;
struct msg { /*send_data*/
int len;
char str[BLKSIZ];
} *p_gds;
unsigned long rc;
char p_lu[9];
char p_mode[9];
int length;
if(( fd = open(p, O_RDONLY | O_BINARY)) < 0){
window(20);
window_xy(20, 6, 1);
strcpy(pt, "Error file open. Press ESC to continue.");
window_puts(20, pt);
goto SendExit;
}
FS = filelength( fd );
sprintf(fsiz, "%lu", FS);
if ((p_gds = malloc(sizeof(struct msg))) == NULL) {
return 1;
}
buff = (char *)p_gds + 2;
window(20);
window_xy(20, 1, 1);
strcpy(pt, "Partner LU..................");
strcat(pt, pstr[cur_ln].plu);
window_puts(20, pt);
window_xy(20, 2, 1);
strcpy(pt, "File name...................");
strcat(pt, p);
window_puts(20, pt);
window_xy(20, 3, 1);
strcpy(pt, "File size...................");
strcat(pt, fsiz);
window_puts(20, pt);
window_xy(20, 4, 1);
strcpy(pt, "Sent count..................0");
window_puts(20, pt);
if ( n != 0 ){
if (!tp_exist) {
tp_started
(lu_id,
tp_id,
&rc);
if (rc != 0) {
window_xy(20, 6, 1);
window_puts(20, "TP_started failure. Press ESC to exit.");
goto SendExit;
}
tp_exist = 1; /* TP_started O.K! */
}
strcpy (tpn,"SEND "); /* name of work */
strcat (tpn, p); /* file name */
/*conv_id - return param -id work link */
strcpy(p_lu, pstr[cur_ln].plu);
strcpy(p_mode, pstr[cur_ln].mode_name);
allocate (p_lu,
p_mode,
tpn,
WHEN_SESSION_ALLOCATED,
NONE,
NONE,
NULL,
NULL,
tp_id,
&conv_id,
NULL,
&v_rc) ;
if (v_rc.prim != 0) {
window_xy(20, 6, 1);
window_puts(20, "Allocation failure. Press ESC to exit.");
goto SendExit;
}
}
else
{
max_length = 255;
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
p_gds,
&wr);
}
count = 0;
while ((s = read(fd,buff, BLKSIZ)) > 0 ) {
/* Send this line */
count += s;
p_gds->len =s + 2;
length=p_gds->len;
send_data(tp_id,
conv_id,
p_gds,
0,
0,
length,
&v_rc,
&rts);
max_length = 255;
if (v_rc.prim == 0) {
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
p_gds,
&wr);
}
else {
window(14);
window_xy(14, 1, 4);
window_puts(14, "Return code from send");
sprintf(retstr,"%x", v_rc.prim);
i = (30 - strlen(retstr))/2;
window_xy(14, 2, i);
window_puts(14, retstr);
while ((ch = getch()) != ESC) ;
deactivate(14);
goto EndOfSend;
}
/* Map bytes count */
window_xy(20, 4, 29);
sprintf(fsiz, "%lu", count);
window_puts(20, fsiz);
}
EndOfSend:
deallocate (tp_id,
conv_id,
Flush,
&v_rc);
if (v_rc.prim != 0) {
window(14);
window_xy(14, 1, 4);
window_puts(14, "Ret. code from DEALLOCATE");
sprintf(retstr,"%x", v_rc.prim);
i = (30 - strlen(retstr))/2;
window_xy(14, 2, i);
window_puts(14, retstr);
while ((ch = getch()) != ESC) ;
deactivate(14);
}
window_xy(20, 6, 1);
strcpy(pt, "Ready! Press ESC to continue.");
window_puts(20, pt);
SendExit:
if (p_aparm -> pgm_state != 1) { /* Local control */
while ((ch = getch()) != ESC) ;
}
else {
tp_ended (tp_id, &rc);
tp_exist = 0;
}
deactivate(20);
close( fd );
free( p_gds );
return (0);
}